"
Задача: Есть ломаная линия, дан список координат составляющих её точек:
'((x1 . y1) (x2 . y2) ... (xn . yn))

По этим координатом нужно определить, в какую сторону (в право или в лево) отклоняется линия в каждом изгибе.
В результате должен быть такой список: '(left right right ... left)
"

(defun sq (n)
  (* n n))
    
(defun make-vec (x1 y1 x2 y2)
  (cons (- x2 x1)
        (- y2 y1)))

(defun x (v)
  (car v))

(defun y (v)
  (cdr v))

(defun pnts->vec (p1 p2)
  (make-vec (x p1) (y p1)
            (x p2) (y p2)))

(defun vec-len (v)
  (sqrt (+ (sq (x v))
           (sq (y v)))))

(defun vec-sub (vec1 vec2)
  (make-vec (x v2) (y v2)
            (x v1) (y v1)))

(defun scalar (v1 v2)
  (+ (* (x v1)
        (x v2))
     (* (y v1)
        (y v2))))

(defun vecs-product (v1 v2)
  (- (* (x v1)
        (y v2))
     (* (x v2)
        (y v1))))

(setq else t)

(defun bending-direction (v1 v2 / prod)
  (setq prod (vecs-product v1 v2))
  
  (cond
    ((= prod 0)
     'straight)
    ((> prod 0)
     'left)
    (else
     'right)))

(defun first (lst)
  (car lst))

(defun second (lst)
  (cadr lst))

(defun points->vectors (points) ; Преобразует список точек в список векторов, проходящих между этими точками. Вектора исходят из начала координат.
  (if (null (cdr points))
    nil
    (cons (pnts->vec (first  points)
                     (second points))
          (points->vectors (cdr points)))))

(defun vectors-bendings-directions (vectors)
  (if (null (cdr vectors))
    nil
    (cons (bending-direction (first  vectors)
                             (second vectors))
          (vectors-bendings-directions (cdr vectors)))))
  
; Vec = [Cons Number Number]
; Direction = 'straight | 'left | 'right
; [List Vec ...] -> [List Direction ...]
(defun line-bendings-directions (line-points )
  (vectors-bendings-directions (points->vectors line-points)))

(defun println (some)
  (princ some)
  (princ "\n"))

;(setq test '((1 . 2)
;             (3 . 4)
;             (2 . 6)
;             (6 . 6)
;             (3 . 1)
;             (3 . 2)))
;(println test)
;(println (line-bendings-directions test))
;(println '(left right right right))